package com.sparkseries.dao;

import com.sparkseries.domain.SysDepartment;
import com.sparkseries.domain.SysPosition;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;


/**
 * 岗位管理
 *
 * TODO
 * 排序问题
 * 分页
 * 成员分配
 * 岗位分类
 */
@Mapper
public interface SysPositionMapper {

    /**
     * 插入多个职位信息到数据库
     *
     * @param positions 职位对象列表
     * @return 插入成功的记录数
     */
    Integer insertPositions(@Param("positions") List<SysPosition> positions);

    /**
     * 根据职位ID获取职位信息
     *
     * @param id 职位ID
     * @return 对应的职位对象，如果不存在则返回null
     */
    SysPosition getPositionById(@Param("id") Integer id);

    /**
     * 根据职位名称获取职位信息
     *
     * @param name 职位名称
     * @return 对应的职位对象，如果不存在则返回null
     */
    SysPosition getPositionByName(@Param("name") String name);

    /**
     * 更新职位信息
     *
     * @param position 职位对象，包含需要更新的信息
     * @return 更新成功的记录数
     */
    Integer updatePosition(@Param("position") SysPosition position);

    /**
     * 根据职位ID列表删除职位信息（逻辑删除，设置is_enabled为0）
     *
     * @param ids 职位ID列表
     * @return 更新成功的记录数
     */
    Integer deletePositions(@Param("ids") List<Integer> ids);

    /**
     * 获取所有启用的职位信息
     *
     * @return 启用的职位对象列表
     */
    List<SysPosition> getAllPositions();

    /**
     * 根据条件查询职位信息
     *
     * @param position 包含查询条件的职位对象
     * @return 符合条件的职位对象列表
     */
    List<SysPosition> findPositionByCondition(@Param("position") SysPosition position);

    /**
     * 为多个职位分配部门
     *
     * @param positionIds 职位ID列表
     * @param departmentId 部门ID
     * @return 返回值：受影响的行数
     */
    Integer assignDepartment(@Param("positionId") List<Integer> positionIds, @Param("departmentId") Integer departmentId);
    /**
     * 获取该职位所属部门
     *
     * @param positionId 职位ID
     * @return 该职位所属部门列表
     */
    List<SysDepartment> getDepartmentByPosition(@Param("positionId") Integer positionId);
}

